package biblio.model;

import java.util.Comparator;

/**
 * Cette classe contient un comparateur qui permet de trier les
 * revues selon le rang
 * 
 * @version 18/11/13
 * @author Ballarini Robin
 */
public class RevueComparators{

	/**
	 * Comparateur selon le rang de la revue
	 */
	public class RankComp implements Comparator<String>{
		@Override
		public int compare(String a, String b){
			
			// Les rangs
			String ra=a;
			String rb=b;
			
			// Verifier si une des 2 revues n'a pas de rang
			if(ra.equals("") && rb.equals("")){
				return 0;
			}
			else if(ra.equals("")){
				return 1;
			}
			else if(rb.equals("")){
				return -1;
			}
			
			// Les rangs en ignorant l'etoile
			String aCut=ra;
			String bCut=rb;
			
			if(ra.endsWith("*")){
				aCut=ra.substring(0,ra.length()-2);
			}
			if(rb.endsWith("*")){
				bCut=rb.substring(0,rb.length()-2);
			}
			
			int r=ra.compareTo(rb);
			if(r==0){ // Les rangs sont egaux
				return r;
			}
			else{
				r=aCut.compareTo(bCut); 
				if(r==0){ // Les rangs en ignorant l'etoile sont egaux
					// On applique une correction pour l'etoile
					r=(ra.endsWith("*")) ? r+1 : r;
					r=(rb.endsWith("*")) ? r-1 : r;
				}
				return r;
			}
			
		}
	}
	
	/**
	 * Comparateur selon la cle (autre que rang) en String de la revue
	 */
	public class SimpleStringComp implements Comparator<String>{
		@Override
		public int compare(String a, String b){
			if(a.equals("") && b.equals("")){
				return 0;
			}
			else if(a.equals("")){
				return 1;
			}
			else if(b.equals("")){
				return -1;
			}
			return a.compareTo(b);
		}
	}
}
